ALGORITMOA ETA FLUXU DIAGRAMAK
DATU SINPLEEN ERABILERA
Meatze eta herri obren injinerutza teknikoko unibertsitate eskola
Irakaslea: Eli Alberdi
II. ATALA. ALGORITMOA ETA FLUXU DIAGRAMAK. DATU SINPLEEN ERABILERA
AURKIBIDEA
1.- Zer da algoritmo bat?
2.- Algoritmo baten propietateak:
3.- Fluxu diagramak.
4.- Oinarrizko arauak.
5.- Aldagaiak eta eragiketak.
6.- Operatzaile motak:
6.1- Aritmetikoak.
6.2- Erlaziozkoak.
6.3- Logikoak.
6.3.1- NOT.
6.3.2- AND.
6.3.3- OR.
7.- Fluxu diagramen zenbait adibide.
8.- Mathematica-ko zenbait agindu.
FLUXU DIAGRAMAK
1.- Zer da algoritmo bat?
Konputazio Zientziaren (Informatikaren) oinarrizko kontzeptua algoritmoa da. Hura formalki definitu aurretik intuitiboki zer den azalduko dugu, edo behintzat saiatuko gara azaltzen. Ordenagailuen programazioa zeregin berria da, baina “programazioa” funtsean arazoen soluzioa bilatzeko metodoa da eta esan genezake arazoak bezain zaharrak direla haien ebazpideak. Planteaturiko arazo bat soluzionatzeko lau urrats betetzen dira, ordenagailuen programazioan beteko ditugunak:
1. Arazoaren ulermena. Problema zehaztasunez deskribatu beharra dago, hau da, zer egin behar den prezisio osoz jakitea ezinbestekoa da. Urrats hau ez da beti behar bezala betetzen eta oso ondorio txarrak ekartzen ditu.
2. Arazoa ebazteko plana egin. Zer egin behar den ziurtasunez dakigunean bestelako galderak erantzun genitzake, arazoari nola ekingo diogun bidea erakusten digutenak: Zer baliabide daukagu? Zer nolako tresneria? Nolakoak dira langileak? Zer epetan amaitu behar da? Zerbait erosi behar da? Errekurtso edo baliabide guztiak nola konbinatuko dira?
3. Plana gauzatu. Zer egin behar den dakigunean eta nola egingo den hausnartu ondoren lanean hasiko gara, helburu zehatza lortzeko plangintza egokiarekin.
4. Soluzioa ebaluatu. Gure produktuak hasierako espezifikazioak betetzen ditu?
Soluzioa bilatzeko lau urrats horietan ez da esan arazoak Informatikoa izan behar duenik, Informatikaren mundura jauzi eginez problema bati erantzuten dion programa lortzeko lau urratsak hauek dira:
1. Arazoaren definizioa
2. Algoritmoa asmatu
3. Algoritmoa programa bezala idatzi
4. Soluzioa ebaluatu
Beraz programa bat idatzi aurretik algoritmo bat sortu beharra daukagu. Baina algoritmoa zer da? Algoritmo batek lan bat egiteko jarraitu beharreko metodoak edo pausoak zeintzuk diren deskribatzen du. Algoritmo bat instrukzioen multzo edo sekuentzia bat da, zeintzuek era egokian exekutatzen badira, nahi dugun emaitza bueltatzen dute. Informatikakoak ez diren zenbait algoritmoren adibideak dira: sukaldeko errezeta bat, etxeko tresna bat instalatzeko manual bat, etxe bat eraikitzeko instrukzioak jasota deuden plano bat, e.a.
2.- Algoritmo baten propietateak:
Algoritmo baten propietateak lau dira:
- Finitua izatea: pauso kopuru finitu batez osatua egon behar du.
- Definitua izateko gaitasuna: pauso bakoitzak era zehatz batean definituta egon behar du.
- Sarrera multzoa: algoritmoko hasierako datuak zehaztu behar dira.
- Irteera multzoa: Algoritmoak ematen dizkigun emaitzen multzoa da.
- Eraginkortasuna: Egin beharreko eragiketak oinarrizkoak izan behar dute, honela bakarrik lortuko baitu prozesatzaileak eragiketa hauek era zehatz batean eta denbora finituan egin ahal izatea.
3.- Fluxu diagramak:
Eskema eran algoritmo bateko instrukzioen sekuentzia edota prozesu bateko pausoak adierazteko dauden teknikak dira. Algoritmo bat eragiketez, erabaki logikoez eta errepikatzen diren zikloez osatua dago eta sinbolo estandar batzuen bidez adierazten dira. Honela, elipseak erabiltzen dira algoritmo bat hasteko edo bukatzeko, erronboak erabiltzen dira datuak konparatzeko edo erabakiak hartzeko, e.a. Fluxu diagrama izena jasotzen dute erabiltzen ditugun sinboloak instrukzio sekuentzia batez edo gezi bidez adierazitako pausoetan konektatzen direlako.
Algoritmo batek problema bateko emaitzak zehazten ditu. Programazioko lengoia batera itzultzen denean, errazagoa da programa depuratzea algoritmoaren fluxu diagrama erabilita kodigoaren lerroak erabilita baino. Gainera, fluxu diagramek beste pertsona batzuei erraztu egiten diete planteatutako emaitzeko sekuentzia logikoa eta problemen soluziobideko edo prozesuko pausoak adierazteko dokumentazio bezala erabilgarriak dira.
Azkenik, problema bat ebatzi behar dugunean, lehenengo eta behin emaitza oso orokorra emango digun algoritmoa diseinatzen da. Ondoren, fluxu diagrama egiten da, era eskematiko baten problemaren emaitza adierazten duena eta hau erabilita programazioko lengoaiaren bat erabiliz programa idazten dugu.
Programa bat idaztea erraza da, erabiltzen dituen arau sintaktiko eta semantikoak eta instrukzioak ezagutzen baditugu. Sormen-lan intelektuala, pentsamendu sakon bat eskatzen duena, arrazonatzeko gaitasun malgu eta kritiko bat eskatzen dituena, fluxu diagrama eraikitzea da, zeinek problemaren emaitza xehatua (detallado) adierazten duen.
Fluxu diagrama edo organigrametan erabilitako sinboloak hauek dira:
|
|
Hasiera/amaiera |
|
Erabakia: |
|
|
Sarrera orokorra: Sarrera/irteera datuetarako orokorrean.
|
|
Iterazioa: |
|
|
Teklatutik
sarrera:
|
|
Inpresoratik
irteera: |
|
|
Subrutina
bati deia: |
|
Irteera
pantailan:
|
|
|
Ekintza/Prozesua
orokorrean: |
|
Konektorea
(orri berean): |
|
|
Fluxua: |
|
Konektorea
(orri ezberdinak): |
4.- Oinarrizko arauak:
Fluxu diagrama bat egiteko arauak hauek dira:
- Sinbolo guztiek lotuta egon behar dute.
- Prozesuko sinbolo batera lerro bat baino gehiago irits daiteke.
- Erabakia adierazten duen sinbolora lerro bat baino gehiago irits daiteke, baina bakarrik bi lerro irtengo dira bertatik.
- Hasierako sibolora ez da lerrorik iristen eta amaierako sinbolotik ez da lerrorik ateratzen.
Adibideak:
Adibidea:
Adibidea:
5.- Aldagaiak eta eragiketak:
Programa baten exekuzioan datu batzuek ez dira aldatzen baina beste batzuek balio ezberdinak har ditzakete. Alda daitezkeen datuak aldagaien bitartez adierazten dira, eta funtsean aldagai batek memoriaren zati zehatz bat erabiltzea ahalbideratzen du. Aldagaiak bi eratakoak izan daitezke:
Zenbakizkoak: osoak, koma higikor erakoak.
Alfanumerikoak: karaktereak, karaktere kateak.
Programa batean egin daitezkeen eragiketak askotarikoak izan daitezke. Hala nola:
Egokitzapenak egin daitezke: Horretarako “=” ikurra erabiltzen da.
Konparaketak egin daitezke: a=b? Mathematican hau honela idazten da: a==b. Konparaketak egiteko erabiltzen dira: ==, !=, >, <, >=, <=
Eragiketa aritmetikoak egin daitezke: Hauek egiteko ondorengo operatzaileak erabiltzen ditugu: +, -, *, /, ^ (berreketarako)
Eragiketa logikoak egin daitezke: Operatzaile hauek erabiltzen dira:
OR, AND, NOT, NAND (bere barruko argumenturen bat gezurra denean True bueltatzen du eta guztiak egia badira False bueltatzen du), NOR (bere barruko argumenturen bat egia denean False bueltatzen du eta guztiak gezurra badira True bueltatzen du)
6.- Operatzaile motak:
6.1- Aritmetikoak:
Operatzaile aritmetikoek datu osoekin edo errealekin eragiketa matematikoak egitea ahalbidetzen dute. Datu denak osoak badira, emaitza ere osoa izango da. Datuetako bat erreala baldin bada, emaitza ere erreala izango da.
Operatzaile aritmetikoen lehentasunak hauek dira:
Lehenengo parentesiak ebaluatzen dira. Katetautako parentesien kasuan barruko parentesitik hasiko gara.
Mathematicak dituen operatzaile aritmetikoak (lehentasun ordena kontuan hartuta) hauek dira:
1.- Berreketak.
2.- Zatiketak eta biderketak, Mod (zenbaki osoen arteko zatiketa egiten du eta hondarra bueltatzen du), Quotient (zenbaki osoen zatiketa egiten du eta zatidura bueltatzen du).
3.- Batuketak eta kenketak.
Lehentasun berdineko operatzaileak ditugunean, ezkerretik eskuinera ebaluatzen dira (hau da, irakurri ahala).
Adibideak:
|
6+8*3=30 |
22*3/5+1=66/5+1 |
|
3+5*(10-(2+4))=23 |
3^2+5/3=9+5/3=32/3 |
|
8.25*4+3=33.+3=36. |
8/4+9/3-2=2+9/3-2=2+3-2=3 |
|
120.35+60-30-5=180.35-30-5=145.35 |
3+5+Mod[15,3]=8 |
|
5*4+3-2+Quotient[17,5]=21+3=24 |
(3*5)/(4*2)=15/(4*2)=15/8 |
6.2- Erlaziozkoak:
Bi balioren artean erlazio bat ezartzeko erabiltzen dira. Erlazioa betetzen bada edo ez bada betetzen, egia edo gezurra emaitzak bueltatzen ditu. Era berdineko balioak konparatzeko erabiltzen dira (zenbakizkoak edo kateak).
Ebaluatzerakoan erlaziozko operatzaile guztiek dute lehentasun maila berdina, baina erlaziozkoek aritmetikoek baino lehentasun maila baxuagoa dute. Hauek dira erlaziozko operatzaileak:
== (berdin), < , <= , > , >=, != (ezberdin, Mathematican ! = idazten da)
Adibideak:
1.- a=10, b=20 eta c=30 izanik,
a+b>c erlazioak gezurra emango luke.
a-b<c erlazioak egia emango luke.
a-b=c erlazioak gezurra emango luke.
a*b<>c erlazioak egia emango luke.
2.- Goian definitutako a eta b-ren balioak kontuan izanik:
a^2<b^2 erlazioak egia emango luke.
3.- Z=6, P=7.8 izanik:
(Z*5+P^3/4)>=Quotient[P^3,Z]
P^3=474,552; Z*5=30; 474.552/4=118.638; 30+118.638=148.638
Quotient[474.552,6]=79
148.638<=79 FALSE
4.- ((Mod[1580,6]*2^7)>(7+8*3^4))>((15*2)==(60*2/4))
Oharra: Mathematicak ez daki gezurra > egia den ala ez
6.3- Logikoak:
Operatzaile hauek balio logikoen artean erlazioak ezartzeko erabiltzen dira. Baldintza sinpleak erabiliz, baldintza konplexuak formulatzea ahalbidetzen dute. Operatzaile logikoek true edo false bueltatzen dute. Exekuzioko lehentasuna kontuan hartuz hauek dira operatzaile logikoak:
6.3.1- NOT: Ukatzea adierazten du. Not P, P ez dela egia esan nahi du. Mathematican ! harridura marka erabilita idazten da Not.
NOT operatzaileak balio bat ukatzen du:
|
Operatzailea |
NOT operatzailea |
|
T |
F |
|
F |
T |
6.3.2- AND: “Eta” esan nahi du. P And Q biak bete behar dira. Adibidez: denbora eta gogoa baditut, zinemara joango naiz. Mathematican erabilita idazten da And.
AND operatzaileak true bueltatzen du operatzaile guztiak egia direnean:
|
operatzailea |
AND |
operatzailea |
Emaitza |
|
T |
T |
T |
|
|
T |
F |
F |
|
|
F |
T |
F |
|
|
F |
F |
F |
Adibidez: Zinemara noa Pedro eta Markos baldin badoaz. Pedrok eta Markosek, biek joan behar dute zinemara, neu ere zinemara joan nadin.
6.3.3- OR: “Edo” esan nahi du. P edo Q, bietariko bat bete behar da. Adibidez: euria ari badu edo telebistan partidurik ez badago, zinemara noa. Mathematican erabilita idazten da Or. Ordenagailuan sinbolo hauek honela idazten dira: Alt GR tekla sakatuta dela 1 zenbakiaren teklari emanda.
Or operatzaileak true bueltatzen du operatzaileren bat betetzen bada.
|
operatzailea |
OR |
operatzailea |
Emaitza |
|
T |
T |
T |
|
|
T |
F |
T |
|
|
F |
T |
T |
|
|
F |
F |
F |
Adibidez: Pisu bat erosiko dut prezioak jaisten badira edo loteria tokatzen bazait. Bi hauetako baldintzaren bat betetzen bada, pisu bat erosiko dut. Jakina, biak betetzen badira ere erosi egingo dut –biak bete badira, bat gutxienez bete dela esan nahi baitu-.
Adibideak:
a=10, b=20, c=30, d=40 izanik:
(a<b) AND (b<c) erlazioa egia da. Baldintza biak betetzen baitira.
((a>b) OR (a<c)) AND ((a==c) OR (a>=b)) honela egingo litzateke:
1.- a>b parentesiak False emango luke.
2.- a<c parentesiak true emango luke.
3.- False OR true: True emango luke.
4.- a==c parentesiak False emango luke.
5.- a>=b parentesiak False emango luke.
6.- False OR False: False emango luke.
7.- Azkenik True AND False: False emango luke.
6.4- Operatzaile guztien lehentasuna (aritmetikoak, erlaziozkoak eta logikoak).
Lehentasun gehien duenetik gutxien duenera hauxe da ordena:
1.- Parentesiak.
2.- Berreketak.
3.- *, /, Mod, Quotient, NOT,
4.- >, < >=, <=, <>, =, OR.
5.- eta lehentasun berdina duten adierazpen baten ezkerretik eskuinera ebaluatzen dira.
7.- Fluxu diagramen zenbait adibide:
7.1-
Erabiltzaileari 4 zenbaki tekleatzeko eskatuko dion eta ondoren
kontrako ordenan inprimatuko dituen programa baten algoritmoa egingo
dugu.
7.2-
Bi zenbaki oso eskatzen dituen eta (a+b)^2/2 adierazpenaren emaitza
idatziko duen programa baten algoitmoa idatzi.
8.- Mathematica-ko zenbait agindu.
- Teklatutik zenbaki bat eskatzeko Input erabiltzen da. Adibidez, ondorengo instrukzioarekin, erabiltzaileari zenbaki bat eskatuko genioke eta ematen digun zenbaki hori “n” aldagaian gordeko genuke.
n=Input[“Sartu zenbaki bat teklatutik”]
- Prepend agindua: Bere idazkera hauxe da:
Prepend[adierazpena, elementua]
“Adierazpena”-ren aurrean “elementua jartzen du.
Adibidea:
Prepend[{a,b,c,d},x]
{x,a,b,c,d}
- Append agindua: Bere idazkera hauxe da:
Append[adierazpena, elementua]
“Adierazpena”-ren atzean “elementua jartzen du.
Adibidea:
Append[{a,b,c,d},x]
{a,b,c,d,x}
ZENBAKI MOTAK ETA ZEHAZTASUNA KALKULUAK EGITERAKOAN
Meatze eta herri obren injinerutza teknikoko unibertsitate eskola
Irakaslea: Eli Alberdi
III. ATALA: ZENBAKI MOTAK ETA ZEHAZTASUNA KALKULUAK EGITERAKOAN.
AURKIBIDEA.
1.- Zenbaki motak eta zehaztasuna kalkuluak egiterakoan.
2.- Erabiltzaileak definitutako aldagaiak eta funtzioak.
3.- Aldagai lokalak eta aldagai globalak.
4.- Funtzio baten definizioa.
1.- Zenbaki motak eta zehaztasuna kalkuluak egiterakoan.
Mathematicak mota guztietako zenbakiekin egin dezake lana: osoekin (Integer), arrazionalekin (Rational), errealekin (Real) eta konplexuekin (Complex). Zenbaki bat zein motatakoa den jakiteko erabiltzen den agindua hauxe da: Head[zenbakia].
Adibideak:
Head[42] aginduak Integer itzultzen du.
Head[42.5] aginduak Real itzultzen du.
Head[42+3I] aginduak Complex itzultzen du.
A=5; Head[a] aginduak Integer itzultzen du.
Mathematicak ez dauka mugarik zenbaki osoen tamainari dagokionez, muga bakarra ordenagailuko memoriak jartzen duena da. Zenbaki oso zein arrazionalekin egiten diren eragiketa guztiak zehaztasun infinitoaz egiten dira, beraz, Mathematica programak emaitza zehatza bueltatzen du.
Adibideak:
In[1]:=2^500
Out[1]=
Mathematicak zenbaki erreal kontsiderazioa (Real) ematen diete hamartarrak dituzten zenbakiei. Eragiketa batean zenbaki hamartarren bat agertzen bada, Mathematicak balio hurbildua bueltatuko du 6 digituko doitasuna duena, nahiz eta bere barruan eragiketak 16 hamartarrekin egiten dituen.
2,0^100 jartzen badugu beste emaitza hau bueltatzen du: 1.26765x1030
Goiko adibideak adierazten digu
Mathematicak 2 zenbaki osoa eta 2.0 zenbakia erreala bereiztu egiten
dituela. Honela, 2.0 zenbakia hamartarrak dituen zenbaki bezala
kontsideratua da eta ondorioz, bueltatzen duen emaitza hurbildua da.
Mathematica beti saiatzen da emaitza zehatza bueltatzen eta honela
idazten dugunean, berak berriz ere
bueltatzen digu. Hau da:
Posible da Mathematica balio hurbildu bat ematera derrigortzea. Honetarako, zenbakia formatu hamartarra erabilita idatziko dugu:
Honetarako
idatziko dugu eta Mathematicak bueltatuko digun emaitza izango da:
1.41421.
Beste era honetan ere egin daiteke emaitza hurbildua lortzea nahi badugu: N[adierazpena] agindua erabiliko dugu, adierazpena//N idaztearekin baliokidea dena. Hau da:
Baita ere erabil daiteke N[adierazpena,n] agindua zeinetan adierazpena n digitu erabilita idatzita jaso nahi dugula adierazten diogun Mathematicari. Adibidea:
2.- Erabiltzaileak definitutako aldagaiak eta funtzioak:
Aldagaiak erabiltzen dira egingo diren kalkuluetan erabiliko den informazioa tenporalki gordetzeko. Ezaugarriak:
Aldagaiaren izenak hizki batez hasi behar du. Aldagaien izenen zenbait adibide: x, y, irratia, luzera, batuketa, i, xm, xy, x1, z4, e.a.
Mathematicako agindu, funtzio edo konstanteentzako gordeta dauden izenak ezin dira erabili aldagaien izen bezala. Hau eragozteko era bat, aldagai guztien izenak minuskulaz idaztea da.
Ez dago zertan erabiliko diren aldagaiak aurrez definitu beharrik. Erabiltzera goazen momentuan bertan sistema gai da beraiek identifikatzeko.
Aldagai bati balio bat ezartzea bi eratan egin daitekeen ekintza da:
Zuzeneko egokitzapenean “=” sinboloa erabiltzen da. Adibidea: aldagaiaren izena= adierazpenaren balioa.
Berehalako egokitzapen hauek honela funtzionatzen dute: berdin ikurraren eskuin aldean dagoen adierazpena ebaluatzen da eta berdin ikurraren ezkerreko aldean dagoen aldagaian gordetzen da balio hau. Goiko adibidean, “a” aldagaiari 4 balioa egokitu diogu, “x” aldagaiari “a”-k momentu horretan zuen balioa egokitu diogu, hau da, 4 balioa. Print[a], Print[x] eta Print[c] egiten baditugu, 5, 4 eta 21 emaitzak jasoko ditugu.
Aurretiazko egokitzapena (edo
diferitua): kasu honetan “:=”
sinboloa erabiltzen da. Adibidea: aldagaiaren izena:=
adierazpenaren balioa. Zuzeneko egokitzapenean erabiltzen den “=”
sinboloa eta aurretiazko egokitzapenean erabiltzen den “:=”
sinboloa bereizi beharra dago. Honela,
idazten badugu, adierazp2-n dagoen balioa adierazp1-eko balio
aurreratuan jartzeko esaten ari gara. Baina adierazp2 ez da
berehala ebaluatzen, baizik eta horretarako, adierazp1-i deitu
behar zaio eta hau egiten den bakoitzeko adierazp2 berriz ebaluatu
behar da.
Adibidea: Random[ ] komandoak 0 eta 1 bitartean dagoen ausazko zenbaki bat bueltatzen du. Agindu hau exekutatzen den bakoitzeko, zenbaki ezberdin bat lortzen da –kasualitatez berdina ere lor daiteke kasuren batean-.
Goiko adibidea jarraituz, Mathematican ausazkoa idazten badugu eta INTRO tekla sakatzen badugu, ausazkoak balio duena bueltatzen digu: 0.8756. Geuk aldatzen ez dugun bitartean, ausazkoa izeneko aldagaiak 0.8756 balioa izango du.
Azpiko adibidean, Random[ ] agindua ez da ebaluatuko harik eta ausazkoa2 aldagaiari deitzen diogun arte. Deitzen diogun bakoitzeko, agindua berriz exekutatuko da eta aldi bakoitzean ausazkoa2 izeneko aldagaian dagoen balioa ezberdina izango da.
**Ohartu, aurretiazko egokitzapenak ez duela pantailara ezer bueltatzen. Hau da, ausazkoa2:=Random[ ] idatzi dugu eta exekutatu dugu, baina pantailara ez du ezer bueltatu.
Hau da, Mathematican aurretiazko egokitzapena erabiltzen dugunean, Mathematicak ez du ezer bueltatzen pantailara. Agindu honek, Null izeneko irteera duelako da. Null-ek esan nahi du agindu horrek pantailara ez duela ezer bueltatuko. Agindu batek Null irteera duenean ez da ezer inprimatzen pantailara.
Aldagaiei balioak egokitzeko berehalako egokitzapena erabiltzen da. Funtzio bat definitu nahi dugunean berehalako egokitzapena eta aurretiazko egokitzapena biak erabil daitezke. Batzuetan ez dauka garrantzirik bata zein bestea erabiltzeak, baina batzuetan bai axola du zein erabiltzen dugun, ondorengo adibideetan ikusiko dugun bezalaxe.
Adibideak:
1.- Lehenengo adibidea: Berehalako egokitzapena erabilita f[x] funtzioa definitzen dugunean, berehala ebaluatzen da N[x^2, 30] agindua eta “x” hutsik dagoenez, Mathematicak erantzun bezala “x”-a bera ematen du eta hemendik aurrera Mathematicak f[edozer] ulertuko du.
2.- Bigarren adibidea: Kasu honetan f[x] funtzioa aurretiazko egokitzapena erabilita definitu dugu. N[x^2, 30] agindua ez da berehala ebaluatuko, funtzioari deitzen diogunean baino. Eta funtzioari deitzen dioguneko momentua f[Pi] egiten dugun unea da.
Estrategia orokor bezala aurretiazko egokitzapena erabiltzea ona da funtzioak definitzerakoan, baina adibidez, deribatuak definitu behar direnean hobeto da zuzeneko edo berehalako egokitzapena erabiltzea, hurrengo adibidean ikusiko dugun bezalaxe.
3.- Hirugarren adibidea: Mathematicak geuk egiten dugun eran definitzen ditu 1., 2. eta 3. ordenako deribatuak:
Mathematicak badaki zelan deribatzen den definituta dagoen f[x] funtzio bat. 3 baino ordena handiagoko deribatuentzat erabiltzen den agindua hauxe da: D[f[x],{x,n}] “n” zenbakiak kalkulatu nahi dugun deribatuaren ordena adierazten duelarik. Deribatuak definitzerakoan kontu izan behar da hurrengo adibidean ikusiko dugunarekin:
Hau da h[x] funtzioa definitzeko aurretiazko egokitzapena erabili dugunez, Mathematicak h[x]-en definizio gisa gordetzen duena ez da x6 funtzioaren 4. deribatua; h[x] funtzioaren barruan gordetzen duena da D[f[x],{x,4}] komandoa edo agindua. Baina, agindu hau ez da exekutatua izan, aurretiazko egokitzapena baita eta ondoren exekutatzen baita, h[x] funtzioari deitzen zaionean. Horrela, goiko adibidean h[3] idatzi dugunean, Mathematicari esaten ari gara f[3] deribatzeko 3 aldagaiarekiko 4 aldiz. Eta gertatzen zaiona da, 3 ez dela deribatzeko egokia den aldagai bat. Hau da, h[3]=D[f[3],{3,4}] da esaten ari garena. Hau guztia konpon daiteke, h[x] funtzioa berehalako egokitzapenaren bidez definitzen badugu:
Era honetan, Mathematicak D[f[x],{x,4}] komandoa berehala exekutatzen du eta bere emaitza h[x] aldagaian gordetzen du. Ondoren, h[3]-ri deitzen diogu, deribatua x=3 puntuan ebalua dezan.
3.- Aldagai lokalak eta aldagai globalak:
Iterazioko bukleetan iteratzaileak erabiltzen dira, zeintzuek hasierako balio batekin hasten diren eta handitzen edo txikitzen doazen balioak izanik, harik eta momentu baten balio bat lortzen duten arte eta orduan buklea gelditu egiten da.
“++i” erabiltzen badugu, “i” aldagaiaren balioa unitate batean handitzen da eta emaitza erakusten du. Alderantziz, “i++” jartzen dugunean, “i” aldagaiaren balioa ematen digu eta ondoren, “i” aldagaiaren balioa unitate batean handitzen du. Honen antzeko esanahia daukate beste hauek ere: “i- - “ zeinetan “i” aldagaiaren balioa ematen da eta ondoren, i-ren balioa unitate batean jaisten da. Zalantzarik dagoen kasuetan, beste adierazpen hauek erabil daitezke: “i=i+1” edota “i=i-1” baldin eta hauek argigarriagoak iruditzen bazaizkigu.
Adibidea:
“a++” egiten dugunean, “a”-ren oraingo balioa bueltatzen duela izan kontuan 7 izanik balio hau. Ondoren, unitate batean handitzen du balio hau baina ez dugu emaitza ikusten. Honegatik, Mathematicari oraintxe “a”-ren balioa galdetuko bagenio, Global erako aldagaia dela erantzungo liguke eta berak oraintxe duen balioa 8 dela (eta ez 7 goian agertzen den bezalaxe).
Mathematican aldagai bat edo funtzio bat definitzen denean, Mathematicak testuinguru batean gordetzen du. Besterik esan ezean, erabiltzaileak definitzen dituen aldagai eta funtzio guztiak gordetzen diren testuingurua Global izenekoa da. Era honetan gordeta, aldagai eta funtzio hauek notebook-eko edozein zeldatan erabiliak izan daitezke. Baina batzuetan, aldagai edo funtzio oso konkretu bat erabiltzea komenigarria izan daiteke zereginen batzuetarako, baldin eta aldagai eta funtzio hori programako beste leku batzuetatik eskuragarri izatea nahi ez dugunean. Honetarako, Mathematicak Module izeneko agindua dauka:
Module[{x,y,…}, adierazpena]: x, y, … sinboloak adierazpena izeneko aldagai edo funtzioan aldagai lokal bezala kontsideratuak izango dira.
Module[{x1=x01,x2=x02,…,xn=x0n},adierazpena]
Goiko adibide honetan “a” zein den galdetzen diogunean, aurretik “a” aldagaian gordeta duen balioa eman digu.
Hemen daukazu beste adibide bat aldagai lokal eta globalaren arteko diferentzia ulertzen lagun diezazukena:
4.- Funtzio baten definizioa:
Funtzio bat definitzeko ondorengo sintaxia erabiltzen da:
Funtzioaren-izena[aldagai1_, aldagai2_,….,aldagai_n]:=adierazpena
Adibidea:
Kasu honetan funtzioko argumentua “x” da eta argumentua kortxete artean adierazten da beti. Funtzioari deitzera goazenean, balioak pasatuko badizkiogu, definizioko kortxetearen barruan gidoi baxua eraman behar du argumentuak. Kasu honetan: f[x_]=3x^2 +5. Momentu honetatik aurrera definitu berri dugun funtzioa erabili ahal izango dugu, puntu baten duen balioa kalkulatzeko, bere deribatua kalkulatzeko, grafikoki irudikatzeko, e.a. Ez dago funtzio batean barnean joan daitekeen aldagai kopururako inolako mugarik. Adibidez, f[x_,y_,z_]=x*y+y*z funtzioa 3 aldagaitako funtzioa da.
Aldagai batean gordea izateko jasotzea espero dugun datu mota zelakoa izan behar duen definitu dezakegu. Honetarako sintaxi hau erabiltzen da: aldagaiarenizena_mota
Adibidea: Aldagai osoak darabiltzan “g” funtzio bat definituko dugu. Funtzio honek bere argumentu bezala onartuko ditu bakar-bakarrik osoak diren zenbakiak. Funtzio honek osoa ez den zenbaki baten hartzen duen balioa kalkulatu nahi badugu, Mathematicak ez du ezer itzuliko.
|
Berehalako egokitzapena erabilita: |
Aurretiazko egokitzapena erabilita:
|
Oharrak:
Arazoak eta ezusteko emaitzak ekiditeko, komenigarria da argumentu bezala adierazita dauden aldagaiak garbiak egotea, hau da, aurretiaz beste baliorik egokitu gabe egotea. Aldagai bat edo batzuk borratzeko ondorengo agindua erabiltzen dela:
Clear[aldagai1, aldagai2, aldagai3,…]
Goiko adibidean, Clear[f] egin dugunean, aurretik “f”-n definituta egon den funtzioa borratu du eta beste “f” funtzio bat definitu dugu.
Adibideak:
Clear[a,x,y] aginduak: a, x eta y aldagaietan gordeta egon dena ordenagailutik borratzen du.
Clear[“a*”] aginduak “a” letraz hasten diren aldagai eta funtzio guztiak borratzen ditu.
Clear[“Global`*] aginduak aurretik definitu ditugun aldagai eta funtzio guztiak borratzen ditu. Edozein Notebook edo programaren hasieran erabiltzen badugu, hainbat arazo ekidingo dizkigu, berau exekutatzean aurretik memorian egon diren aldagai eta funtzio guztiak borratuko baititu.
SISTEMA BITARRA
Meatze eta herri obren injinerutza teknikoko unibertsitate eskola
Irakaslea: Eli Alberdi
IV. ATALA: SISTEMA BITARRA.
AURKIBIDEA.
1.- Sistema bitarra.
1.1- Sistema bitarra adierazteko erak.
1.2- Sistema hamartar eta bitarraren arteko bihurketak.
2.- Sistema bitarretik zortzitarrerako aldaketa:
2.1- Bitarretik zortzitarrera.
2.2- Zortzitarretik bitarrera.
2.3- Zortzitarretik hamartarrera.
3.- Sistema bitarraren eta hamaseitarraren arteko aldaketa:
3.1- Bitarretik hamaseitarrera.
3.2- Hamaseitarretik bitarrera.
4.- Eragiketak sistema bitarrean.
4.1- Zenbaki bitarren batuketa.
4.2- Zenbaki bitarren kenketa:
4.3- Zenbaki bitarren arteko biderketa.
4.4- Zenbaki bitarren arteko zatiketa.
1.- Sistema bitarra:
0 eta 1 sinboloak erabiltzen dituen zenbaketa sistema bat da sistema bitarra. Ordenagailu bateko osagaiek izan ditzaketen bi egoera ezberdinak adierazteko oso erabilia da, bai elektronikan eta baita informatikan ere. Horrela, 0 batek korrontea ez dela pasatzen adierazten du eta 1 batek korrontea bai pasatzen dela. Sistema bitarraren edo bere hurbilpena izan daitekeen sistema baten jatorria K. a. III mendean aurki dezakegu baina XVII. mendean izan zen Leibniz-ek sistema hau Explication de l’Arithmétique Binaire izeneko artikuluan dokumentatu zuena. Artikulu honetan matematikari txinatarrek erabiltzen zituzten sinboloak aipatzen dira eta Leibniz izan zen 0 eta 1 sinboloak sistema bitarreko sinbolo bezala erabiltzen hasi zena. 1854. urtean, George Boole britainiar matematikariak logikako sistema bat zehaztu zuen, Boole-ren algebra izena hartzen bukatuko zuen sistema, hain zuzen. Sistema honek gaur eguneko sistema bitarrean paper garrantzitsua izan zuen, batez ere zirkuitu elektronikoen garapenean eragin garrantzitsua izan zuen.
Sistema bitarra adierazteko erak:
Zenbaki bitar bat bit sekuentzia baten bidez adieraz daiteke, bi egoera ezberdinetan egon daitekeen mekanismo baten bidez. Ondoren jartzen ditugun sekuentzia guztiak zenbaki bitar berdina adierazteko erabili ahal izango lirateke:
100101101001
xooxoxxoxoox
+- - + - + + -+- -+
ynnynyynynny
Kasu bakoitzean adierazten ari garen zenbakia, sinbolo bakoitzari eman zaion balioaren mendekoa da. Ordenagailu batean zenbakizko balioak boltaia ezberdinen bidez adieraz daitezke eta disko magnetiko baten gaineko polaritate magnetikoak ere erabil daitezke. Positiboa edo baietza adierazpenak ez dute zertan 1 zenbakiaren baliokideak izan behar. Hau guztia, erabilitako arkitekturaren mendekoa da.
Zenbaki bitarrak normalean 0 eta 1 sinboloak erabilita idazten dira. Sarritan azpi-indizea ere jarri egiten da, zein oinarri erabiltzen ari garen adierazteko. Honela, hurrengo notazioak baliokideak dira:
100101 bitarra: formatua era esplizitu batean definituta.
100101b: b atzizkia erabili dugu sistema definitzeko.
1001012: bi azpi-indizea erabili dugu oinarria adierazteko.
Sistema hamartar eta bitarraren arteko bihurketak.
Hamartarretik bitarrera:
Metodoa: Sistema hamartarrean emanda daukagun zenbakia 2 zenbakiagatik zatitzen da. Zatiketa honetan lortu den zatidura, berriro ere bigatik zatitzen da eta honela behin eta berriro, zatiketa egitea ezinezkoa den arte. Azken zatidura eta hondarrak azkenetik lehenengora ordenatuta bata bestearen segidan idazten dira. Eta hauxe izango da bila genbiltzan sistema bitarreko zenbakia.
Adibideak:
1.- 131 zenbaki hamartarra zenbaki bitar bihurtu.
|
Zenbakia |
Zatidura (zati bi eginda) |
Hondarra |
|
131 |
65 |
1 |
|
65 |
32 |
1 |
|
32 |
16 |
0 |
|
16 |
8 |
0 |
|
8 |
4 |
0 |
|
4 |
2 |
0 |
|
2 |
1 |
0 |
|
1 |
0 |
1 |
Azken zatidura eta hondarrak azkenetik hasierara ordenatuta hartzen ditugu: 10000011.
2.- 100 zenbaki hamartarra zenbaki bitarrean bihurtu:
□
Metodoa: Sistema hamartarrean emanda dauden zenbakiak sistema bitarrera pasatzeko badago beste era bat ere. Sistema hamartarretik bitarrera pasatu nahi dugun zenbakia bigatik zatitzen dugu eta zatitu dugun zenbaki hori bikoitia edo bakoitia izatearen arabera, eskuineko zutabean 0 (zenbakia bikoitia denean) edo 1 jarriko dugu (zenbakia bakoitia denean). Ondoren, ezker zutabeko azken emaitza hartuko dugu (beti 1 izango dena) eta eskuin zutabeko zenbaki guztiak hartuko ditugu behetik gorako ordena jarraituz.
Adibideak:
1.- 100 zenbakia hamartarrean idatzita daukagu eta bitarrean idatziko dugu:
100 | 0
50 | 0
25 | 1 1, 25-1=24 eta bi zenbakiagatik zatitzen jarraituko dugu.
12 | 0
6 | 0
3 | 1
1 | 1 10010=11001002
Metodoa: Azkenik, existitzen den beste metodo bat, banaketa metodoa deitzen dena da. Metodo hau beharrezkoak diren 1-ak bi zenbakiaren ondoz ondoko berretzaileen artean banatzean datza, beraien batura, sistema bitarrera bihurtu nahi dugun zenbakia izanik. Adibidez, 151 zenbakia sistema hamartarretik bitarrera bihurtu nahi badugu, bi zenbakiaren lehenengo 8 potentziak beharko dira, 28=256 zenbakia, sistema hamartarretik bitarrera bihurtu nahi dugun 128 zenbakia baino handiagoa baita. Honela, 128an 1 jarriz hasiko gara. 151-128=23 ematen du. 23 zenbakia honela banatuta lortuko dugu: 24, 22, 21 eta 20. Hau da, honela geratzen da:
Emaitza: Berretzailea
20=1 | 1
21=2 | 1
22=4 | 1
23=8 | 0
24=16 | 1
25=32 | 0
26=64 | 0
27=128 | 1
128+16+4+2+1=15110=100101112
Zenbaki hamartarrak dituen eta sistema hamartarrean emandako zenbakia sistema bitarrera pasatzeko:
Ezkerreko aldetik hasten gara, zenbaki bakoitza bi zenbakiaz biderkatzen. Parte osoa 0 baino handiagoa bada, bitarrean 1 jarriko dugu eta bestela 0 jarriko dugu.
Parte erreala bat den kasuan, hurrengo biderketan bakarrik hamartarrak erabiliko dira.
Biderketa bakoitza egin ostean, lortzen diren zenbakiak lortu diren ordena jarraituz idazten dira.
Zenbaki batzuek digitu periodikoetan bihurtzen dira. Adibidez: 0.1 zenbakia digitu periodikoak dituen zenbaki bitar bihurtzen da, geroago ikusiko dugun bezala.
Adibidea:
1.- Sistema bitarreko 0,3125 zenbakia sistema bitarrean idatziko dugu. Honetarako, biderketak egiten hasiko gara:
0,3125x2=0,625 -> 0
0,625x2=1,25 -> 1
0,25x2=0,5 -> 0
0,5x2=1 -> 1
Hasieratik amaierako ordena jarraituz idatziko dugu zenbakia: 0101-> (0.0101)2
2.- Sistema hamartarreko 0.1 zenbakia sistema bitarrean idatzi:
0,1x2=0,2 ->0
0,2x2=0,4 ->0
0,4x2=0,8 ->0
0,8x2=1,6 ->1
0,6x2=1,2 ->1
0,2x2=0,4 ->0 Hemendik aurrera 4 zifrak errepikatzen dira periodikoki.
0,8x2=1,6 ->1
0,6x2=1,2 ->1
Goitik beherako ordena jarraituta honela idazten da zenbakia: 0 0011 0011. Beraz, 0.1 zenbakia bitarrean honela idazten da: 0.110=0.0001100112
Bitarretik hamartarrera:
Sistema bitarrean emandako digitu bakoitzak posizioari lotuta dagoen balio bat dauka, 2n zenbakia bider posizio horretan digituak balio duena (0 edo 1) eginda lortzen dena. Berretzailearen “n” balioa zero baliotik hasten da eta unitate bat gehitzen doa eskuinetik ezkerrera.
Biderketa guztiak egin ostean, emaitza guztiak batu egiten dira eta horixe izango da zenbaki hori sistema hamartarrean idazteko dagoen era.
**Era honen guztiz baliokidea da, 1-ak agertzen diren posizioei dagokien 2n-ak batzearena.
Adibideak:
1.- 1101012 zenbakia sistema hamartarrean idatzi nahi dugu:
1101012=
2.- 100111112 zenbakia sistema hamartarrean idatziko dugu:
100111112=
3.-
101001012
zenbaki bitarra
zenbaki hamartarra da.
Bakarrik parte hamartarra duen zenbaki bitarra hamartarrera pasatzea:
Ezkerreko aldetik hasten gara. Digitu bakoitza 2-m zenbakiagatik biderkatzen da, “m” zenbakia digitu horrek hamartarretan okupatzen duen posizioa izanik (“m” positiboa da, noski).
Behin biderketa guztien emaitzak ditugunean, balio guztiak batzen dira eta lortzen den zenbakia izango da sistema hamartarrean zenbaki hori idazteko daukagun era.
Adibideak:
1.- 0.1010012=0.64062510
Prozesua hauxe izango da:
Zenbaki guztien batura hauxe da: 0.64062510
2.- 0.1101112=0.85937510
Prozesua hauxe izango da:
Zenbaki guztien batura hauxe da: 0.85937510
Sistema bitarrean emandako hamartardun zenbakia sistema hamartarrean idaztea:
Koma dagoen posizioaren ezker aldean geratzen den digitua 20 zenbakiaz biderkatzen da eta zenbaki honetatik ezkerrera joan ahala, bi zenbakiaren potentziari 1 gehitzen joaten gara. Bestela, goian, bakarrik parte hamartarra duen zenbaki bitarra sistema hamartarrera pasatzeko azaldu dugun prozedura erabiltzen da.
Adibidea:
1.- 11010,1112 =53,62510
Jarraitzen den prozesua hauxe da:
2.- Sistema bitarretik zortzitarrerako aldaketa:
2.1- Bitarretik zortzitarrera:
Sistema zortzitarrak 0-7 bitarteko zenbakiak (0 eta 7 barne) erabiltzen ditu. 7 zenbakia da sistema zortzitarreko zenbakirik handiena eta hau 3 digitu erabilita adieraz daiteke sistema bitarrean, beraz hauxe egingo dugu:
Eskuineko aldetik hasita, sistema bitarrean emanda daukagun zenbakian hirunaka hartuko ditugu digituak. Azken taldean 3 digitu egongo ez balira, 0ak erabiliz osatuko genuke talde hau.
Ondoren, 3 digituko talde bakoitzari sistema zortzitarrean dagokion balioa kalkulatzen da.
Adibidea:
|
Zenbakia bitarrean |
000 |
001 |
010 |
011 |
100 |
101 |
110 |
111 |
|
Zenbakia zortzitarrean |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
Sistema zortzitarrean dagokion zenbaki honi dagokion zifra ezkerretik eskuinera taldekatzen da.
Adibideak:
1.- 1101112=678
Prozesua hauxe da:
|
Sistema bitarrean Sistema zortzitarrean
|
110 6 |
111 7 |
2.- 110011112=3178
|
- Sistema bitarrean
-Zeroekin osatzen da osatu gabe geratu den hirukotea - Sistema zortzitarrean
|
11
011 3 |
001
001 1 |
111
111 7 |
3.- 10000112=1038
|
- Sistema bitarrean
-Zeroekin osatzen da osatu gabe geratu den hirukotea - Sistema zortzitarrean
|
1
001 1 |
000
000 0 |
011
011 3 |
2.2- Zortzitarretik bitarrera:
Zortzitarreko digitu bakoitza 3 digitu erabilita bitarrean idazten da eta ordena bera erabilita zenbaki guztiak elkartzen dira.
Adibidea:
1.- 2438=0101000112
2=010
4=100
3=011
2.- 7578=1111011112
2.3- Zortzitarretik hamartarrera:
Eskuinetik hasita eta ezkerrerantz, zortzitarreko digitu bakoitza 8 zenbakiaren potentziekin biderkatzen da (zero potentziatik hasita). Ondoren, emaitza hauek guztiak batzen dira eta zenbakia lortuko dugu sistema hamartarrean.
Adibidea:
3.- Sistema bitarraren eta hamaseitarraren arteko aldaketa:
3.1- Bitarretik hamaseitarrera:
Sistema hamaseitarrak 0-9 arteko zenbakiak eta A, B, C, D, E eta F sinboloak erabiltzen ditu. Sistema hamaseitarreko baliorik handiena F da eta beroni 15 zifra dagokio hamartarrean. Zenbaki hau sistema bitarrean adierazteko 4 digitu behar dira. Beraz, zenbaki bat sistema bitarretik hamaseitarrera pasatu nahi denean hauxe egiten da:
Sistema bitarrean emanda daukagun zenbakian lauko taldeetan banatzen dira digituak eskuinetik hasita. Ezkerreko taldeak 4 digitu izango ez balitu zeroak erabilita osatzen da talde hau.
Ondoren, 4 digituko talde bakoitzari sistema hamaseitarrean dagokion balioa idazten da:
|
Sistema bitarra |
Sistema hamaseitarra |
|
0000 |
0 |
|
0001 |
1 |
|
0010 |
2 |
|
0011 |
3 |
|
0100 |
4 |
|
0101 |
5 |
|
0110 |
6 |
|
0111 |
7 |
|
1000 |
8 |
|
1001 |
9 |
|
1010 |
A |
|
1011 |
B |
|
1100 |
C |
|
1101 |
D |
|
1110 |
E |
|
1111 |
F |
Bukatzeko eskuinetik ezkerrera multzokatuta idazten da balio hamaseitarra.
Adibideak:
1.- 1101110102=1BA16
Jarraitutako prozesua hauxe da:
|
- Sistema bitarrean
-Zeroekin osatzen da osatu gabe geratu den hirukotea - Sistema hamaseitarrean
|
1
0001 1 |
1011
1011 B |
1010
1010 A |
2.- 110111101012=6F516
Jarraitutako prozesua hauxe da:
|
- Sistema bitarrean
-Zeroekin osatzen da osatu gabe geratu den hirukotea - Sistema hamaseitarrean
|
110
0110 6 |
1111
1111 F |
0101
0101 5 |
3.2- Hamaseitarretik bitarrera:
Sistema hamaseitarrean emandako digitu bakoitza 4 digitu erabilita sistema bitarrean idazten da eta ezkerretik eskuinera idazten da lortzen den zenbakia.
Adibidea:
6FA516 Sistema bitarrean: 0110 1111 1010 0101
Digituak hirunaka banatuta: 000 110 111 110 100 101
Hiruko digitu multzoak sistema zortzitarrean: 0 6 7 6 4 5
Sistema
hamartarrean:
Sistema hamartar, bitar, zortzitar eta hamaseitarraren arteko aldaketa taula:
|
Sistema hamartarra |
Sistema bitarra |
Sistema zortzitarra |
Sistema hamaseitarra |
|
0 |
0000 |
0 |
0 |
|
1 |
0001 |
1 |
1 |
|
2 |
0010 |
2 |
2 |
|
3 |
0011 |
3 |
3 |
|
4 |
0100 |
4 |
4 |
|
5 |
0101 |
5 |
5 |
|
6 |
0110 |
6 |
6 |
|
7 |
0111 |
7 |
7 |
|
8 |
1000 |
10 |
8 |
|
9 |
1001 |
11 |
9 |
|
10 |
1010 |
12 |
A |
|
11 |
1011 |
13 |
B |
|
12 |
1100 |
14 |
C |
|
13 |
1101 |
15 |
D |
|
14 |
1110 |
16 |
E |
|
15 |
1111 |
17 |
F |
4.- Eragiketak sistema bitarrean:
4.1- Zenbaki bitarren batuketa:
Bi biten batuketa egiterakoan dauden aukerak hauek dira:
Adibidea:
1001101
+ 0111001
10000110
Eskuinetik hasten gara batuketak egiten. Beraz, lehendabizi egiten dugun batuketa 1+1 da eta honen emaitza 10 da, beraz, 0 jartzen dugu eta hurrengo batuketarako 1 eramaten dugu.
4.2- Zenbaki bitarren kenketa:
Kenketaren algoritmoa sistema bitarrean sistema hamartarrekoaren berdina da. Horregatik, sistema hamartarrean kenketak egiteko dagoen algoritmoa errebisatuko dugu lehenik eta behin. Oinarrizko kenketak hauek dira:
0-1 kenketa sistema hamartarrean egiten den bezalaxe egiten da: aurreko posiziotik 1 hartzen da maileguz (tomar prestado).
Adibidea:
10001 Zenbaki hau 17 da sistema hamartarrean
- 01010 Zenbaki hau 10 da sistema hamartarrean
00111 zenbaki hau 7 da sistema hamartarrean
11011001 Zenbaki hau 217 da sistema hamartarrean
- 10101011 Zenbaki hau 171 da sistema hamartarrean
00101110 Zenbaki hau 46 da sistema hamartarrean
Kenketak egiteko era sinplifikatzeko badaude zenbait metodo:
Zenbaki luzeak taldeetan banatzen dira. Hurrengo adibidean kenketa luze bat 3 kenketa laburretan zelan bana daitekeen ikusiko dugu:
|
100110011101 - 010101110010 010000101011
|
|
Birekiko osagarria erabilita (C2): Sistema bitarrean emanda dauden bi zenbakiren kenketa egin daiteke kenkizunari kentzailearen 2rekiko osagarria batuta. Kontuan izan kenketa bateko elementuak hauek direla: kenkizuna (goikoa), kentzailea (behekoa), kendura (kenketaren emaitza).
Gogoratu baita ere sistema bitarrean zenbaki baten birekiko osagarria, batekiko osagarriari (hau 0ak dauden lekuan 1ak jarriz eta 1ak dauden tokian 0ak jarriz lortzen da) unitate bat gehituta lortzen dela.
Adibideak:
1.- 91-46=45 egingo dugu.
|
0101110 zenbakiaren C2: 1010010
|
C2 egin aurretik kentzaileari kenkizunak duen luzera bera jartzen zaio. Eta emaitzan ezkerreko aldetik bit bat sobera badaukagu, lortuko den kendura kenkizuna baino handiagoa ezin duenez izan, sobera dagoen bitari ez zaio jaramonik egiten. Beraz, emaitza bezala, 0101101 hartzen da (hau da, ezkerreko bita kendu egin da). |
2.- 219-23=196 egingo dugu.
|
00010111 zenbakiaren C2: 11101001
|
Ezkerreko aldean sobera dagoen bita kenduz, emaitza lortuko dugu: 11000100, hamartarrean 196 zenbakia dena. |
3.- Batekiko osagarria erabilita sistema bitarrean emanda dauden bi zenbakiren arteko kenketa, kenkizunari kentzailearen batekiko osagarria batuta egin daiteke.
|
01001 zenbakiaren C1: 10111
|
Ezkerreko aldean sobera dagoen bita kenduz, hauxe daukagu: 01000,. Eta zenbaki honi +1 eginda emaitza lortzen dugu: 010012=910 |
4.3- Zenbaki bitarren arteko biderketa:
Sistema bitarrean emanda dauden zenbakien arteko biderketa egiteko erabiltzen den algoritmoa, sistema hamartarrean erabiltzen den berdina da. Egia esan, errazagoa da, 0 zenbakia edozerekin bidertuta zero baita eta 1 zenbakia biderketarekiko elementu neutroa baita.
Adibidea: 10110x1001 biderketa egingo dugu:
4.4- Zenbaki bitarren arteko zatiketa:
Zenbaki hamartarren arteko zatiketa egiteko erabiltzen den algoritmoa erabiltzen da. Kontuan izan, kenketak egiterakoan hauek sistema bitarrean egin behar direla.
Adibidea: 100010010 (27410) eta 1101 (1310) zenbakien arteko zatiketa egingo dugu:
ZERRENDAK EDO ARRAY-AK
Meatze eta herri obren injinerutza teknikoko unibertsitate eskola
Irakaslea: Eli Alberdi
V. ATALA: ZERRENDAK EDO ARRAY-AK.
AURKIBIDEA.
1.- Zerrendak edo array-ak.
2.- Edozein zerrenda edo bektorek berau identifikatzeko balio duen izena dauka
3.- Matrize bidimentsionalak.
4.- N dimentsioko matrizeak.
5.- Trukaketa algoritmoa.
6.- Ordenazioko algoritmoak.
6.1- Barne ordenazioko algoritmoak.
6.1.1- Selekzioko algoritmoa.
6.1.2- Burbuilaren metodoa.
6.2- Kanpo ordenazioko algoritmoak.
7.- Bektore edo matrize bateko bilaketak.
7.1- Bilaketa sekuentziala.
7.2- Bilaketa dikotomikoa.
8.- Ordenatzeko edo bilatzeko zenbait erari dagozkien fluxu diagramak.
8.1- Selekzio bidezko ordenamendua.
8.2- Burbuila metodoa erabiliz ordenamendua.
8.3- Bilaketa sekuentziala (ordenatu gabeko bektorea).
8.4- Bilaketa dikotomikoa (ordenatutako bektorea).
1.- Zerrendak edo array-ak:
Zerrenda, array-a edo bektorea, ordenagailuko memorian datuak gordetzea eta manipulatzea ahalbidetzen duen egitura bat da. Edozein eratako datuak izan ditzake: zenbakizkoak, alfanumerikoak, funtzioak, e.a. eta aipatutakoen nahasketa ere izan daiteke (hau da, askotariko elementuak dituena). Zerrenda bat elementuen multzoa da koma bidez bereizita daudenak eta giltzen artean idazten direnak.
Mathematicarentzat bektore bat zerrenda bat da eta matrize bat zerrenden zerrenda da.
Adibideak:
Ondorengo adibidea, matrize bat da (zerrenden zerrenda). 2 lerro edo errenkada eta 3 zutabe ditu.
Mathematicak erabiltzen dituen komandoak zerrendak sortzeko eta manipulatzeko:
|
Table[f,{i,n}] Array[a,n] Range[n] Range[n1,n2] Range[n1,n2,dn] List[[i]] or Part[list,i] Length[list] Column[list] |
Build a length-n vector by evaluating f with i=1,2,…,n Build a length-n vector of the form {a[1],a[2],…} Create the list {1,2,3,…,n} Create the list {n1,n1+1,…,n2} Create the list {n1,n1+dn,…,n2} Give the ith element in the vector list Give the number of elements in list Display the elements of list in a column |
|
Cross[a,b] Noorm[v] |
Multiply a vector by a scalar Dot product of two vectors Cross product of two vectors (also input axb) Euclidean norm of a vector |
2.- Edozein zerrenda edo bektorek berau identifikatzeko balio duen izena dauka:
Bektore bateko elementu batez aritu nahi dugunean, bere izena zenbaki batez indexatuta jarriko dugu kortxete bikoitzen artean. Kortxete bikoitz artean jarriko dugun zenbakiak datuak zerrendaren barruan okupatzen duen zenbakia adierazten du.
Adibidez:
3.- Matrize bidimentsionalak:
Aurretik esan dugun bezalaxe, Mathematicarentzat matrizeak zerrenden zerrendak dira. Honela definitzen eta erreserbatzen dira.
Adibidea:
Kasu hauetan, matrize bateko elementu batez aritu nahi garenean, elementua aurkitzen deneko errenkada eta zutabea zeintzuk diren esan beharko dugu. Kortxete bikoitz artean, lehenengo errenkada zenbakia idazten da eta ondoren zutabe zenbakia.
Adibidea:
4.- N dimentsioko matrizeak:
N dimentsioko matrizea, N azpi-zerrenda dituen zerrenda bat da, eta hauetako bakoitza era berean, azpi-zerrendez osatutako zerrenda bat da. Balioak erreserbatu, manipulatu, atera edota pantailan aurkez daitezke, bakoitza era ezberdinean bada ere. Honetarako, “matndim” izena duen matrize bat erreserbatuko dugu. Beronek, 3 errenkada, 2 zutabe eta 3 sakontasun maila izango ditu.
Adibideak:
Berauetako elementu bat hartu nahi denean, “matndim” izena jarriko dugu eta elementua kokatuta dagoen errenkadaren zenbakia, zutabearen zenbakia eta sakontasun zenbakia jarriko dira era honetan:
matndim[[errenkada zenbakia, zutabe zenbakia, sakontasun zenbakia]].
**Oharra: Kasu honetan “matndim” jarri dugu, guk sortu dugun N dimentsioko matrizeari izen hori eman diogulako.
5.- Trukaketa algoritmoa:
Batzuetan “a” eta “b” bi aldagaitako balioak elkartrukatzeko beharrizana izan dezakegu. Suposa dezagun a=5 dela eta b=3 dela eta beraien balioak elkartrukatu nahi ditugula, hau da, a=3 eta b=5 izatera pasatu behar dugu. Honetarako, aldagai laguntzaile (edo auxiliar) bat erabiliko dugu non balioak gordeko ditugun era honetan:
a aldagaian dagoen balioa “aux”-en gordeko dugu: aux=a egingo dugu honetarako.
b aldagaian dagoen balioa a aldagaian gordeko dugu: a=b
aux aldagaian dagoen balioa b aldagaian gordeko dugu: b=aux.
Adibidea:
Bektore edo matrizeetako elementuak elkartrukatzeko egiten dena ere goian azaldu berri dugunaren berdina da, matrizeko edo bektoreko elementu bakoitza aldagai bat balitz bezala kontsideratzea besterik ez da egin behar.
Adibidea:
Eta bektore bateko edukia beste bektore baten dagoenarekin trukatu nahi badugu, hauxe egin dezakegu:
Adibidea:
Bektoreen edukiak elkartrukatzen direnean, ez da derrigorra bektore biak tamaina berekoak izatea, hurrengo adibidean ikusiko dugun bezalaxe.
6.- Ordenazioko algoritmoak:
Bektore edo matrize bateko elementuak sailkatzeko balio dute. Sailkapena, zenbakizkoa (txikitik handira edo alderantziz) edo alfabetikoa izan daiteke (A-tik Z-ranzkoa edo alderantziz).
Ordenazioko hainbat algoritmo existitzen dira:
6.1- Barne ordenazioko algoritmoak:
Ordenatu behar diren balioak ordenagailuaren memorian egongo dira. Algoritmo hauetan, suposatzen da memorian dagoen edozein datutara iristeko behar den denbora berdina dela, elementuak memorian okupatzen duen posizioak eraginik ez duela, alegia. Hau da, denbora berdina behar da, matndim[[1,1,1]] edota matndim[[1,1,150]] elementura iristeko.
6.2- Kanpo ordenazioko algoritmoak:
Ordenatu behar diren elementuak memorian ez daudeneko kasua da. Ordenatu beharreko elementuak kanpoko euskarri batean daude (disko, zinta magnetiko, DVD, edo antzekoetan). Kasu honetan onartzen da, elementura iristeko beharko den denbora, azkenengo hartu dugun elementuaren posizioaren araberakoa da.
Barne ordenazioko algoritmoen artean hauek dira ikusiko ditugunak:
6.1.1- Selekzioko algoritmoa:
Era honetako algoritmoak elementurik txikiena (edo handiena) aurkitzen du eta elementu horri dagokion posizioan jartzen da. Prozesu hau bektoreko elementu bakoitzarekin errepikatzen da, guztiak ordenatuta dauden arte. Ikus dezagun:
1.-
i=1 baliotik hasita eta i<nelem den bitartean, i++ gehikuntzak
erabilita, hauxe egingo dugu: Gorde:
txikiena=i 2.-
j=i+1 baliotik hasita eta j<nelem+1 den bitartean, j++
gehikuntzak erabilita hauxe egin behar da: (**)
notak(j)< notak(txikiena) baldin bada, bere posizioa gordeko
dugu: txikiena=j, j handitu eta joan 2. Puntura. Notak(j)
ez bada, notak(txikiena) baino txikiagoa, j handitu eta joan 2.
Puntura. Buklea
bukatutakoan aldaketa hau egin: aldatu notak(i)
notak(txikiena)-gatik. 3.-
Handitu i (hurrengo i-ra) eta joan 1. Puntura.
**Oharra: Notak bektoreko elementu guztiak konparatu ondoren, “txikiena” aldagaian bektoreko elementurik txikienaren posizioa izango du eta “i” aldagaian igaroaldi edo pasaldi honetan sailkatzen ari garen elementuaren posizioa izango dugu. Aldaketa honekin aurkitu dugun elementurik txikiena posizio zuzenean egongo da.
Adibidea:
6.1.2- Burbuilaren metodoa:
Bektore batean, bata bestearen ondoan dauden elementuak konparatzean datza.
Bikotea ordenatuta dagoenean, hurrengo bikotearekin jarraitzen da.
Bikotea ordenatu gabe badago, bikotea ordenatzen da eta hurrengo bikotearekin jarraitzen da.
Suposa dezagun “notak” izeneko bektorea dela ordenatu nahi duguna. Lehenengo eta behin, bektore honek duen elementu kopurua “nelem” izeneko aldagaian gordeko dugu. Hauek dira ordenatzeko jarraituko ditugun pausoak:
“i” aldagaiak 1 balio duenetik eta i<nelem den bitartean, i++ gehikuntzak erabilita,
j=i+1 balioan hasita eta j<nelem+1 den bitartean, j++ gehikuntza erabilita,
notak(i)>notak(j) betetzen bada,
notak(i) notak(j)-gatik aldatuko dugu
j-ren hurrengo balioa hartuko dugu
j-ren buklea bukatzen denean:
i-ren hurrengo balioa hartuko dugu
i-ren buklea bukatzen denean, notak izeneko bektorea inprimatuko dugu.
Adibidea:
7.- Bektore edo matrize bateko bilaketak:
7.1- Bilaketa sekuentziala:
Bektorea sailkatuta ez dagoenean erabiltzen da. Elementu bat aurkitzeko, bektoreko lehenengo elementuarekin konparatzen da lehendabizi, ondoren bigarrenarekin eta honela jarraitzen da aurkitu nahi dugun elementua aurkitu arte, edota bektoreko azken elementuarekin konparatu arte.
7.2- Bilaketa dikotomikoa:
Hiztegian hitz bat aurkitu nahi dugunean jarraitzen dugun prozeduraren oso antzekoa da. Bilaketa sekuentzialetik ezberdintzen da, bilaketa dikotomikoan bektorea aurretiaz sailkatuta izan behar dela. Hauxe da jarraitzen den prozesua:
Izan bedi “bek” elementuak dituen bektore baten izena. Ondorengo pausoak jarraituko ditugu:
aurkitu=0
elem=aurkitu nahi dugun elementua
ini=1 (bek bektoreko 1. elementura apuntatzen du).
fin=n (bek bektoreko elementu kopurua) (*Azken elementura apuntatzen du.*)
1.- ini<=fin den bitartean
Zentrala=(ini+fin)/2 (*elementu zentralak okupatzen duen posizioa*)
IF elem=bek(zentrala)
Print “aurkituta”, ini=fin+1, aurkitu=1
IF
elembek(zentrala),
begiratu ea:
IF elem>bek(zentrala), ini=zentrala+1, joan (1) pausora
IF ez bada handiagoa, fin=zentrala-1; joan (1) pausora
Buklea bukatutakoan:
Aurkitu=0 baldin bada, inprimitu “Elementua ez dago bektorean”
Adibidea:
1.- Ordenatu gabe dagoen bektore batean bilaketa sekuentziala aplikatzearen adibidea:
2.- Ordenatuta dagoen bektore batean bilaketa dikotomikoa aplikatzea:
8.-
Ordenatzeko edo bilatzeko zenbait erari dagozkien fluxu diagramak.
8.1- Selekzio bidezko ordenamendua:
8.2- Burbuila metodoa erabiliz ordenamendua:
8.3- Bilaketa sekuentziala (ordenatu gabeko bektorea):
8.4- Bilaketa dikotomikoa (ordenatutako bektorea):
INDEXATUTAKO ALDAGAIAK, BEKTOREAK, HAINBAT AGINDU
Meatze eta herri obren injinerutza teknikoko unibertsitate eskola
Irakaslea: Eli Alberdi
VI. ATALA: INDEXATUTAKO ALDAGAIAK, BEKTOREAK, HAINBAT AGINDU
AURKIBIDEA.
1.- Indexatutako aldagaien definizioa.
2.- Bektoreen definizioa.
3.- Baldintzen ebaluazioa.
3.1- IF agindua.
3.2- Which agindua.
4.- Select.
5.- Switch.
6.- Bukleak.
7- Break.
8.- Do.
9.- While.
1.- Indexatutako aldagaien definizioa:
Indizedun aldagaiak dira, a[1], a[2], a[5], …., a[n] erakoak. Konturatu indizea kortxete bakar baten barruan doala (hau da, ez doa kortxete bikoitzean). Gogoratu, kortxete bikoitza bektore bateko elementuak indexatzeko erabiltzen dela. Izen berezi baten bidez ere defini daitezke aldagai indexatuak, adibidez: izena, adina, dir, pob, prob, e.a. bezalako izenak erabil daitezke. Indizea daukaten aldagaiak erabiltzearen abantaila, indizean sustengatu edo babestu gaitezkeela da, aldagaiak kargatzeko, aztertzeko, inprimatzeko, borratzeko, e.a.
Adibideak:
1.- Ondorengo arauak idazten hasiko gara:
a[4] eta a[6] aldagaietan dauden balioak eskatzen ditugu:
Mathematicari galdetzen badiot ea a zer den, Global motako aldagaia dela esango digu eta “a”-ren definizioa erakutsiko digu:
Emandako bi aldagai indexaturen artean dauden aldagai guztiak definitzea ez da beharrezkoa. Batzuetan, momentu horretan interesatzen zaizkigun elementuetan bakarrik sartuko ditugu datuak. Hau a[i] motako aldagaiak definituta lortzen da. Eta honek abantaila bat ematen digu, bektore osoko elementuak kargatzera behartzen gaituzten bektoreekiko.
Adibidea:
-ren
barnean dagoen edukia inprimatzen badugu, definituta daudenen barruan
dagoen balioa agertuko da eta definitu gabe daudenak beraien
izenarekin agertuko dira:
Aldagai indexatuek bektoreen antzeko portaera dute, baina ez dira bektoreak. Indizea duten aldagaiak dira. Ikus dezagun adibidez, goiko adibideko “p” aldagaiak ez duela tamainarik:
Beraz, p[i] indizedun aldagai bat bailitzan kontsideratu behar dugu. Ondorengo aginduak erabilgarri dira:
p[i]= balioa egiten dugunean, p[i]-n balio bat gordetzen da.
p[i] egiten dugunean, p[i]-n gordeta dagoen balioa bueltatzen digu.
p[i]=. egiten dugunean, p[i]-n gordeta dagoen balioa borratzen da.
?p egiten dugunean, p-ren barruko definizio guztiak erakusten dizkigu.
Itxura hau duen, a[i], adierazpen bat dugunean, indizeak ez du zertan zenbakia izan behar. Mathematicak, indizea adierazpena, sinboloa edo hitza izateko aukera ematen digu.
Adibidea:
Table[adierazpena,imax] edota Array[f,n] aginduak erabilita indexatutako aldagaiak array bihur ditzakegu.
Bi bektore sortu ditugu “p” aldagai indexatuko edukia dutenak: zerrenda izenekoa eta zenbakiak izenekoa. Berauetako bakoitzaren tamaina 7 da (7 elementu dituzte). Bi bektore hauetako elementuren bat ikusi nahi badugu, bektoreen indexazioa erabili beharko dugu.
Mathematicari “zenbakiak” aldagaia ea zein den galdetzen badiogu, Global motako aldagaia dela esango digu eta bektorearen edukia giltz artean erakutsiko digu:
2.- Bektoreen definizioa:
Bektoreak definitzeko Mathematicak daukan era bat zerrendak erabilita egiten dena da. Zerrenda bat era honetan defini daiteke: a={x,y,z,…} eta ondoren, bere elementuetara irits gaitezke a[[i]] agindua erabilita. Zerrenda horretako elementuak aldatu ere egin daitezke a[[i]]=balioa agindua erabilita. Idatzi dugunak esan nahi du, a[[i]] tokian “balioa” gordeko duela. Baina, zerrendak sortzeko era honek zera eskatzen digu: array-ko elementu guztiak bete behar direla berau sortzerakoan.
Bektore bat definitzerakoan, Mathematicak honakoa eskatzen du derrigorrez:
Elementu guztiak kargatzea. Ezin da utzi elementurik kargatu barik.
Bere elementuak “bektorearen izena[[i]]” motako agindua erabiliz indexatzea.
Lenth luzera izango dute.
Indexatutako aldagaiekin egin ditugun eragiketa berdinak egin daitezke, hala nola: kargatu, aztertu, inprimatu, borratu, e.a.
Adibidea:
1.- “zenbakiak2” izeneko bektorea erreserbatuko dugu eta hainbat era ezberdinetan kargatuko dugu:
2.- Beste adibide bat:
3.- Beste adibide bat:
4.- Beste adibide bat:
Edozein balio duen kargatutako bektore bat eduki nahi badugu, Table eta Range aginduak erabil ditzakegu. Adibidea:
3.- Baldintzen ebaluazioa:
3.1- If agindua:
If agindua kontrol egitura bat da, ekintza bat edo ekintza batzuek exekutatuko dira baldintza bat betetzen denaren arabera. Hauxe da bere idazkera:
If[test, then expr1, else expr2, ez badaki expr3]
Test-eko emaitza TRUE bada, expr1 adierazpenean datozen aginduak exekutatuko dira. Test-eko emaitza FALSE bada, expr2 adierazpena exekutatzen da. Eta Mathematica ez bada gai test-a TRUE edo FALSE zer den jakiteko, expr3 adierazpena da exekutatuko duena. Expr3 adierazpena jarri ez bazaio eta Mathematica ez bada gai true edo false zer den jakiteko, berriz IF agindua itzuliko digu geuk sartu diogun era berdinean.
Adibidea:
Adibide honetan, Mathematica ez da gai test-a ebaluatzeko: a>b ebaluatzeko. Ez baitaki “b” aldagaiak zein balio duen. Beraz, berriz ere IF agindua itzultzen digu geuk sartu diogun era berean.
IF agindu batean gerta daiteke azken adierazpena edota azken biak ez agertzea. Beraz, IF-en emaitza ez badaki edota ez bada betetzen hurrengo agindura egiten du salto. Expr1, expr2 eta expr3 adierazpenak puntu eta komaz bereiztuta dauden hainbat agindu izan daitezkeela ere kontuan izan behar duzu.
Adibideak:
1.-Funtzio bat definituko dugu, bere argumentua positiboa denean 1 bueltatuko duena eta negatiboa denean -1 bueltatuko duena.
2.- Baita ere kateatutako If bat erabil dezakegu, x=0 denean 0 itzul dezan:
3.- If bat erabiliz, zenbaki baten logaritmo nepertarra kalkula dezakegu existitzen den kasuan eta existitzen ez denean, ez dela existitzen dioen esaldia bueltatuko liguke:
3.2- Which agindua:
Mathematican bere idazkera hauxe da:
Which[test1, balio1, test2, balio2, …..]
Test1 ebaluatzen du eta egia bada balio1 bueltatzen du, bestela, test2 ebaluatzen du eta egia bada, balio2 bueltatzen du, eta horrela jarraitzen du testn azkenera iritsi arte. Testi guztiak gezurra balira, Null bueltatuko liguke.
Adibideak:
1.- Which[1==2, x, 1==1, y]. Agindu honek, “y” bueltatzen du.
2.- Which[ ] erabil dezakegu, zenbaki baten faktoriala kalkulatzeko:
**Konturatu egokitzapen diferitua erabilita definitu dela faktoriala. Horrela egin ez bagenu, n>1 den kasuan ebaluatzen saiatuko litzateke, eta ez luke jakingo n>1 betetzen den ala ez (hau da, ez luke jakingo testa betetzen den ala ez).
4.- Select:
Erabiltzen den sintaxia hauxe da:
Select[adierazpena, irizpidea, zenbat]
Adierazpen bat emanda, adierazpen horretan zenbat elementuk betetzen duten irizpidea esaten digu.
Adibidea:
-NumberQ aginduak, TRUE bueltatzen du adierazpen bat zenbakia denean eta FALSE, zenbakia ez denean.
- StringQ aginduak TRUE bueltatzen du adierazpena karaktere multzoa denean.
- NumberQ2 aginduak zerrendan aurkitzen dituen lehenengo bi zenbakiak bueltatzen ditu.
- OddQ aginduak TRUE bueltatzen du zenbaki bat bakoitia denean, bestela FALSE buletatzen du.
Adibidea:
Range bektore bat erreserbatuko dugu 1etik 7-ra arteko zenbaki arruntak (naturalak) dituena eta bektore honetatik 3 zenbakiarekin zatitu ondoren hondarra 1 ematen duten zenbakiak bueltatuko ditugu edota 5 zenbakiarekin zatituta hondarra 1 bueltatzen dutenak. Mathematican hau honela egingo genuke:
**Oharra: Ondorengo sinboloa, #, Mathematican select idatzi eta F1 sakatuz gero (F1 laguntza da Mathematican) agertzen diren adibideetan agertzen da eta bertatik kopiatu daiteke.
5.- SWITCH:
Sintaxia hauxe da:
Switch[expr,test1,value1,test2, value2,….]
Expr izena duen adierazpena ebaluatzen du eta lortzen duen emaitza test-etan jarritakoarekin konparatzen du, ordenatuta (lehenengo test1-en dagoenarekin konparatzen du, gero test2-n dagoenarekin, e.a.). Betetzen den lehenengo test-ari dagokion balioa (valuei) bueltatzen du.
Adibidea:
Ondoren ikusiko dugun adibidean, “hizkia” izeneko aldagaiari A-F tarteko letra bat egokitzen dio, restodiv aldagaiak hartzen duen balioaren arabera:
6.- Bukleak:
For:
Agindu hau, sententzia bat edo sententzien multzo bat zenbait aldiz errepikatu behar denean erabiltzen da. For aginduan errepikapen kopurua aldez aurretik ezaguna da, eta For agindua exekutatzen den unean errepikapenak zenbat izango diren ezaguna da. Bere sintaxia hauxe da:
For[hasiera, test,gehikuntza, gorputza]
Hasierako balio batetik hasten gara eta test-en jartzen duena betetzen bada, gehikuntzan dagoena egiten da eta ondoren, gorputza exekutzatzen da.
Adibidea:
1.- “bek” izeneko bektore bat erreserbatzen dugu, elementu alfanumerikoak dituena eta For erabilita, 5 baino balio txikiagoak ateratzen ditugu, lehenengo baldintza dagoen lehenengo elementua aurkitzen dugun arte.
2.- Beste adibide bat: Lehenengo 10 zenbaki arruntak bider 7 eginda inprimatzen ditugu.
3.- Launaka batuko dugu: 4 zenbakian hasi eta 59 zenbakira arte.
7- Break:
Bere sintaxia bakarrik Break[ ] da, eta bere helburua bukle baten exekuzioa moztea edo gelditzea da. Hau interesgarria izan daiteke baldin eta adibidez, pentsatzen badugu bila gabiltzan emaitza lor daitekeela bukleko test-a FALSE izan aurretik.
Adibideak:
1.- Koma higikor erako aritmetikaz lan egiten denean, hau da, oso-oso handiak edo oso-oso txikiak diren zenbakiekin lanean ari garenean, borobiltze erroreak egiten dira. Ondorengo adibidean ikusiko dugu, zenbaki oso-oso txiki bati 1 gehituta lortzen den emaitza 1 izatea posible dela.
2.- Beste adibide bat: Adibide honetan, zenbakiren baten logaritmo nepertarra 2 baino handiagoa den unean, For honen exekuzioa mozten da.
3.- Antzeko adibidea egin dezakegu eta Trace jarriko diogu aurrean Mathematica egiten dabilen pauso bakoitza zein den argi ikusteko:
8.- Do:
Bere sintaxia hauxe da:
Do[expr,{iter1},{iter2},…{iter n}]
Expr adierazpenean jasotako aginduak exekutatzen ditu. Hau da, puntu eta komaz bereiztuta datorren agindu multzoa, iteratzaile1, iteratzaile2, e.a. aldagaiek adierazten dioten beste aldiz.
Hauek dira, iteratzaileekin erabil ditzakegun sintaxi ezberdinak:
{nmax}: “nmax” aldiz errepikatzen du.
{n,nmax}: “n” aldagaiaren balioa 1etik “nmax” arte doa, 1 tamainako pausoak emanez.
{n, nmin, nmax}: “n” aldagaia “nmin”-etik “nmax”-era doa, 1 tamainako pausoak emanez.
{n, nmin, nmax, nstep}: “n” aldagaia “nmin” baliotik “nmax” baliora doa, “nstep” tamainako pausoak emanez.
Adibideak:
1.- {nmax}: eragiketak “nmax”-ek esaten duen beste aldiz errepikatzen ditu:
2.- {n,nmax}: “n” aldagaiaren balioa 1etik “nmax” arte doa, 1 tamainako pausoak emanez.
3.- {n, nmin, nmax}: “n” aldagaia “nmin”-etik “nmax”-era doa, 1 tamainako pausoak emanez.
4.- {n,nmin,nmax,gehikuntza}: “n” aldagaia “nmin”-etik “nmax”-era doa gehikuntzaren araberako pausoak emanez:
Beste adibide batzuek:
1.- Break-ek bukletik irten egiten du baldintza betetzen denean eta beste aginduak bete gabe geratzen dira:
2.- Continue izena duen aginduak, aginduak buklearen barnean jarraitzea eragiten du, baina gorputzean beraren atzetik doazen aginduak bete barik:
3.- Do-ren beste adibide bat daukagu hemen. 200 eta 300 artean dauden zenbakien karratuak batzeko balio du. Aldagai metatzailea sum=0 balioan hasten dugu eta aldagai honetan joango gara kalkuluak metatzen, azken emaitza lortu arte.
Iteratzaile bat baino gehiago agertzen direnean, suposatu adibidez 2 agertzen direla, kateatutako iteratzaileak kontsideratzen dira: Iteratzailearen aldaketa bakoitzeko (iteratzaile1, iteratzaile2, e.a.) bere balio guztiak hartuko ditu.
Adibide bat ikusiko dugu. Adibide honetan, i aldagaiak 1 balioa duenean hasten gara eta j aldagaiak 1-4 arteko balioak hartzen ditu. Ondoren, i aldagaiak 2 balio du eta berriz ere j aldagaiak 1-4 arteko balio guztiak hartzen ditu eta horrela.
9.- While:
Bere sintaxia hauxe da:
While[test, expr]
**Gogoratu ezberdin: != idazten dela Mathematican.
Expr izeneko adierazpenean dauden aginduak exekutatzen dira test-en jarritakoa TRUE den bitartean. Gelditu egiten da test-eko emaitza FALSE denean.
Adibideak:
1.- Lehenengo adibbidea:
2.- Bigarren adibidea: Test bezala, True, jartzen dugunean, While exakutatzen da While-a TRUE den bitartean. Mathematicari True== True galdetzen badiogu, true erantzungo du eta beraz, beti beteko da era honetan planteatu dugun testa.
3.- Hirugarren adibidea: Hurrengo While buklea, tekleatutako zenbakia osoa eta positiboa den bitartean exekutatzen da. Test-a betetzen ez den unean, bukletik irtengo dugu eta azken Print-a exekutatuko du.
4.- Laugarren adibidea: Begiratu ondorengo hiru bukleak. Baliokideak dira eta emaitza berdina bueltatzen dutela konturatu zaitez.